package com.youlai.boot.modules.product.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.boot.modules.product.model.Product;
import com.youlai.boot.modules.product.model.ProductVO;
import com.youlai.boot.modules.category.model.CategoryVO;
import com.youlai.boot.modules.product.model.ProductDetailVO;
import org.apache.ibatis.annotations.Param;
import com.youlai.boot.modules.product.model.ProductPageQuery;
import com.youlai.boot.modules.resource.model.ResourceVO;
import com.youlai.boot.modules.contact.model.ContactVO;

import java.util.List;

public interface ProductMapper extends BaseMapper<Product> {
    Page<ProductVO> getProductPage(Page<ProductVO> page, ProductPageQuery query);

    List<Long> getCategoryIds(@Param("productId") Long productId);

    ProductDetailVO getProductDetail(@Param("productId") Long productId);

    List<CategoryVO> getProductCategories(@Param("productId") Long productId);

    List<String> getCountryCodes(@Param("productId") Long productId);

    List<Long> getDeliveryIds(@Param("productId") Long productId);

    List<Long> getWarehouseIds(@Param("productId") Long productId);

    void saveCategoryRelations(@Param("productId") Long productId, @Param("categoryIds") List<Long> categoryIds);

    void saveCountryRelations(@Param("productId") Long productId, @Param("countryCodes") List<String> countryCodes);

    void saveDeliveryRelations(@Param("productId") Long productId, @Param("deliveryIds") List<Long> deliveryIds);

    void saveWarehouseRelations(@Param("productId") Long productId, @Param("warehouseIds") List<Long> warehouseIds);

    void deleteCategoryRelations(@Param("productId") Long productId);

    void deleteOneCategoryRelation(@Param("productId") Long productId, @Param("categoryId") Long categoryId);

    void deleteCountryRelations(@Param("productId") Long productId);

    void deleteDeliveryRelations(@Param("productId") Long productId);

    void deleteWarehouseRelations(@Param("productId") Long productId);
}
